package lib

import (
	"GameServer/Common/data"
	"GameServer/Game/errors"
	"GameServer/Game/m"
)

// 新手引导结束后，三次指定事件
func TargetAssignment(u *m.User) (r uint64, ok bool) {
	ng := u.GetNewGuide()
	if ng.SlotFlag { // 新手引导结束
		switch ng.TargetAssig {
		case 0: // 攻击
			r = 666
			ok = true
			ng.TargetAssig++
		case 1: // 偷钱
			r = 555
			ok = true
			ng.TargetAssig++
		// case 2: // 获取体力
		// 	r = 444
		// 	ok = true
		// 	ng.TargetAssig++
		default:
			r = 0
			ok = false
		}
		ng.Update(ng)
		return
	}
	// 新手引导未未结束
	return 0, false
}

// 玩家移动关卡 是否可以推送活动
func NewGuidePushActive(us *m.User) bool {
	newGuide := us.GetNewGuide()
	// 玩家刚好达到1-2关，已经推送过一次活动了
	if newGuide.PushActive {
		return false
	}
	// 玩家刚好达到1-2关，并且没有推送过活动。
	if us.MaxPos.LockBlockTid >= 2 && !newGuide.PushActive {
		newGuide.PushActive = true
		newGuide.Update(newGuide)
		return true
	}
	return false
}

// 新手引导 是否推荐玩家工会
func NewGuideRecomUnion(us *m.User, num int64) (r bool) {
	r = false
	newGuide := us.GetNewGuide()
	// 玩家最大关在第二关 并且 玩家没有加入公会
	if us.MaxPos.LockBlockTid == 2 && us.UnionId == "" {
		newGuide.OpenGrid += num
		if (newGuide.Reminders == 0 && newGuide.OpenGrid >= 10) || // 第一次提示
			(newGuide.Reminders == 1 && newGuide.OpenGrid >= 50) || // 第二次提示
			(newGuide.Reminders == 2 && newGuide.OpenGrid >= 100) { // 第三次提示

			newGuide.Reminders++
			r = true
		}

		newGuide.Update(newGuide)
		return
	}
	return
}

// 新手引导，老虎机引导顺序
func NewGuidSlotGuid(from string, us *m.User, spin int64, PSend func(interface{}) error) (isNewGuideSlot bool, key int64, uProp *m.UpdateProp, res []*m.Goods, err error) {
	newGuide := us.GetNewGuide()

	if newGuide.SlotFlag {
		return
	}
	isNewGuideSlot = true
	tplLst, ok := data.GetAllDatas("SlotGuids")
	if !ok {
		err = errors.NewErrcode(data.Errcode.ConfigNotFound, "找不到SlotGuids配置表")
		return
	}
	slotGuidId := newGuide.SlotGuidId + 1

	var slotGuid data.SlotGuid
	for _, item := range tplLst {
		itemT := item.(data.SlotGuid)
		if int64(itemT.Id) == slotGuidId {
			slotGuid = itemT
			break
		}
	}
	// 没有找到新手事件，老虎机新手引导完成
	if slotGuid.Id == 0 {
		newGuide.SlotFlag = true
	} else {
		newGuide.RewardCnt = 0
		// 消耗体力
		costItem := m.BaseKV{Key: data.GlobalEnum.Energy, Val: spin}
		uProp, err = Cost("SlotReward", us, []m.BaseKV{costItem})
		if err != nil {
			return
		}
		key = int64(slotGuid.Event)
		// 找到新手事件，继续老虎机新手任务
		if slotGuid.Reward.Value > 0 {
			goods := m.BaseKV{Key: int64(slotGuid.Reward.Key), Val: int64(slotGuid.Reward.Value)}
			uProp1, resGoods, _, err := GiveGoodsByKv("SlotReward", us, goods, PSend)
			if err != nil {
				return true, 0, nil, nil, err
			}
			uProp.Merge(uProp1)
			res = append(res, resGoods...)
		}
		// 道具已给
		newGuide.SlotGuidId = slotGuidId
		newGuide.SlotEvent = key
		newGuide.RewardCnt++
	}

	newGuide.Update(newGuide)
	return
}
